<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>纯函数作用优势</title>
  <!-- 
  在JavaScript和其他编程语言中，纯函数（Pure Function）是指在相同的输入下，总是返回相同输出的函数，并且不产生任何副作用。
  一、纯函数的定义
  - 相同输入相同输出：纯函数对于相同的输入参数，总是返回相同的结果。
  - 无副作用：纯函数不修改外部状态，也不依赖于外部状态。它不会影响到函数外部的变量或数据结构。

  二、纯函数的优势
  1. 可预测性：
    - 由于纯函数在相同输入下总是返回相同的输出，因此它们的行为是可预测的。这使得调试和理解代码变得更加简单。

  2. 易于测试：
    - 纯函数不依赖于外部状态，因此可以很容易地进行单元测试。只需提供输入并验证输出，而无需考虑其他因素。

  3. 可重用性：
    - 纯函数可以在不同的上下文中重复使用，因为它们不依赖于特定的外部状态。这使得代码更加模块化和可重用。

  4. 更好的并发性：
    - 由于纯函数没有副作用，它们可以安全地并行执行。这在多线程或异步编程中尤为重要，可以提高性能和效率。

  5. 简化状态管理：
    - 在函数式编程中，使用纯函数可以更容易地管理和推导状态。通过组合纯函数，可以构建复杂的逻辑，而不必担心状态的变化。

  6. 提高可读性：
    - 纯函数的代码通常更简洁明了，易于理解。开发者可以更容易地推导出函数的行为，而不需要追踪外部状态的变化。

  三、示例
  以下是一个纯函数和一个非纯函数的对比示例：

  纯函数示例：
  function add(a, b) {
      return a + b; // 相同输入总是返回相同输出，没有副作用
  }

  console.log(add(2, 3)); // 输出: 5
  console.log(add(2, 3)); // 输出: 5
  非纯函数示例：
  let counter = 0;

  function increment() {
      counter += 1; // 修改外部状态，产生副作用
      return counter;
  }

  console.log(increment()); // 输出: 1
  console.log(increment()); // 输出: 2
  四、总结
  纯函数在编程中具有许多优势，包括可预测性、易于测试、可重用性和更好的并发性。通过使用纯函数，开发者可以编写出更清晰、更可靠的代码，提升代码的可维护性和可读性。在现代JavaScript开发中，尤其是在函数式编程和状态管理的上下文中，纯函数的使用越来越受到重视。
   -->
</head>
<body>

  <script>
    // 纯函数示例
    function add(a, b) {
      return a + b; // 相同输入总是返回相同输出，没有副作用
    }

    console.log(add(2, 3)); // 输出: 5
    console.log(add(2, 3)); // 输出: 5

    // 非纯函数示例
    let counter = 0;

    function increment() {
      counter += 1; // 修改外部状态，产生副作用
      return counter;
    }
    
  </script>
  
</body>
</html>